package com.luo.search.repository;
import org.springframework.data.domain.Page;
import com.luo.pojo.search.QuestionForSearch;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.annotations.Highlight;
import org.springframework.data.elasticsearch.annotations.HighlightField;
import org.springframework.data.elasticsearch.annotations.HighlightParameters;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
// ItemRepository接口要继承SpringData提供的ElasticsearchRepository父接口
// 一旦继承,当前接口就会被识别为连接ES的持久层类,SpringData会自动为它生成基本增删改查方法
// ElasticsearchRepository<[关联的实体类名称],[实体类主键类型]>
public interface QuestionSearchRepository extends ElasticsearchRepository<QuestionForSearch,Integer> {
    // SpringData自定义查询
    // 可以通过遵循SpringData框架给定的格式定义方法名称,
    // SpringData会根据方法名称自动生成查询语句
    // query(查询):表示当前方法是一个查询方法,类似sql语句中的select
    // Item/Items:确定要查询哪一个实体类,不带s的是单个对象,带s是集合
    // By(通过/根据):标识开始设置查询条件,类似sql语句中的where
    // Title:要查询的字段,可以根据查询条件修改为Item中的任何字段
    // Matches:执行查询的操作,Matches表示字符串的匹配,而且这个匹配是支持分词的,类似sql语句的like
    @Highlight(fields = {
            @HighlightField(name = "title")},parameters = @HighlightParameters(
            preTags = "<strong><font style='color:red'>",
            postTags = "</font></strong>",
            fragmentSize = 500,
            numberOfFragments = 3
    ))
    @Query("{\n" +
            "    \"bool\": {\n" +
            "      \"should\": [\n" +
            "        { \"match\": { \"title\": \"?0\"}},\n" +
            "        { \"match\": { \"content\": \"?0\"}},\n" +
            "        { \"match\": { \"nickname\": \"?0\"}}\n" +
            "        ]\n" +
            "     }\n" +
            "}")
    Page<QuestionForSearch> search(String keyword, Pageable pageable);




}
